package com.sodimac.v2s.commands
{
	import com.adobe.cairngorm.commands.ICommand;
	import com.adobe.cairngorm.control.CairngormEvent;
	import com.sodimac.util.alerts.alert;
	import com.sodimac.util.commons.EstadosBPM;
	import com.sodimac.util.commons.Session;
	import com.sodimac.util.commons.UtilString;
	import com.sodimac.util.commons.UtilXml;
	import com.sodimac.v2s.business.SfpcDelegate;
	import com.sodimac.v2s.events.grabarPedidoCorpEvent;
	import com.sodimac.v2s.model.ComprasModelLocator;
	
	import mx.events.CloseEvent;
	import mx.rpc.IResponder;

	public class grabarPedidoCorpCommand implements ICommand, IResponder
	{
		private var modelo:ComprasModelLocator = ComprasModelLocator.getInstance();
		private var sesion:Session = new Session();
		private var accion:String;
		private var listado:String;
		private var paisesCorr:Array;
		
		public function execute(event:CairngormEvent):void
		{
			var delegate:SfpcDelegate = new SfpcDelegate(this);
			var encEvt:grabarPedidoCorpEvent = grabarPedidoCorpEvent(event);
			
			accion = encEvt.estado;
			paisesCorr = encEvt.paisesCorreccionArr;
			listado = "";
			
			//genera listado de paises con correccion
			if ( (paisesCorr) && (paisesCorr.length>0) )
			{
				var n:int = paisesCorr.length;
				for (var i:int=0; i<n; i++)
				{
					listado += String(paisesCorr[i]);
					listado += ((i+1)==n)?"":"-";
				}
				trace("listado: " + listado);
			}	
			
			delegate.GrabarPedidoCorp(modelo.cabecera, encEvt.idPedidoCorp,
									encEvt.idEmpresa, encEvt.idProveedor, encEvt.estado, 
									encEvt.version,  encEvt.productosCorpArr, 
									encEvt.productosNacArr,
									encEvt.paisesCorreccionArr);

		}
		
        public function result(obj: Object): void
        {            
			var xmlList:XMLList;
			var xml:XML = new XML(obj.result);
			xml = UtilXml.removeNamespacesFromXML(xml);
			xmlList = xml.children();
			
			var result:Number = Number(xmlList.cabecera.@id);
			var glosa:String =  xmlList.cabecera.@glosa;
			trace("WS GrabarPedidoCorp response id=" + result);

	  	      switch (result){
	  	      case 0:   //Ok
	  	      			
	  	      			//Enviar estado a BPM
	  	      			alert.success("La SFPC ha sido "+ UtilString.toLowerCase(accion) + " exitosamente.", 
	  	      			alertListener);
	  	      			break;
	  	      			
	  	      case 1:   //Error
	  	      			alert.error("Ha ocurrido un error:\n\n"+  glosa);
	  	      			break;
	  	      			
	  	      default:  //reintentar
	  	      	  	     alert.info("Problemas con respuesta del servicio, " + 
									"favor reintente mas tarde.\n\n"+ glosa);
		      			break;                  	      						
	  	      }


        }
                
        public function fault(obj: Object): void
        {
        	alert.error("Ha Ocurrido un error al grabar Productos.");
        	sesion.endSession();
        }	
	
		// Check to see if the OK button was pressed.
		private function alertListener(eventObj:CloseEvent):void 
		{
			
			if  ( (accion == EstadosBPM.ENVIO) || (accion == EstadosBPM.CORREGIR) ) {
		      	//se envia estado a BPM
				var resp:Object = new Object();
				resp.estado = accion;
				if (UtilString.isNotBlank(listado))
				{
					resp.listadoPaises = listado;
				}
				//trace("Datos enviados BPM: accion=[" +  accion + "]   listado=[" + listado + "]");
				sesion.callbackBPM(resp);
			} 
			
			sesion.endSession();
		}	

		
	}
}